package com.example.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/**
 * WebConfig 类用于配置 Web MVC 相关的设置
 * 它通过实现 WebMvcConfigurer 接口来定制 Spring MVC 的行为
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    /**
     * 添加自定义的参数解析器
     * 此方法用于向 Spring MVC 请求处理基础设施中添加自定义的参数解析器
     * 通过实现此方法，可以影响控制器方法参数的解析方式
     *
     * @param resolvers 标准的参数解析器列表，用于处理各种类型的控制器方法参数
     *                  通过向此列表添加解析器，可以使其参与参数解析过程
     */
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        // 添加 AuthenticationPrincipalArgumentResolver 以支持特定的参数解析
        // 此解析器用于解析带有 @AuthenticationPrincipal 注解的方法参数
        // 它将 Spring Security 认证的 principal 对象解析为方法参数
        resolvers.add(new AuthenticationPrincipalArgumentResolver());
    }
}